package com.huaxin.hxmodulestatisticalanalysis.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.huaxin.hxmodulestatisticalanalysis.dto.response.*;
import com.huaxin.hxmodulestatisticalanalysis.models.DeviceDataCollectionWide;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

public interface DataAnalysisService extends IService<DeviceDataCollectionWide> {
    /**
     * 获取最近24小时电压电流趋势数据（5分钟平均）
     * 折线图	A/B/C相电压、电流随时间变化 接口
     *
     * @return 趋势数据列表
     */
    List<VoltageCurrentTrendVO> getVoltageCurrentTrendLast24Hours(Map<String, Object> params);

    /**
     * 获取最近1小时的功率对比数据（每分钟平均值），支持家族ID、组织ID、设备ID、站点编号作为可选条件
     *
     * @param params 包含familyId, orgId, deviceId, stationNumber等可选查询参数
     * @return 功率对比数据列表
     */
    List<PowerComparisonVO> getPowerComparisonLastHour(Map<String, Object> params);

    /**
     * 获取最近24小时的功率因数趋势数据（每分钟平均值），支持家族ID、组织ID、设备ID、站点编号作为可选条件
     *
     * @param params 包含familyId, orgId, deviceId, stationNumber等可选查询参数
     * @return 功率因数趋势数据列表
     */
    List<PowerFactorTrendVO> getPowerFactorTrend(Map<String, Object> params);

    /**
     * 获取电能累积趋势数据
     *
     * @param params 查询参数
     * @return 电能累积趋势列表
     */
    List<EnergyAccumulationTrendVO> getEnergyAccumulationTrend(Map<String, Object> params);

    /**
     * 获取用电量增量数据
     *
     * @param params 查询参数
     * @return 用电量增量列表
     */
    List<EnergyIncrementVO> getEnergyIncrementData(Map<String, Object> params);

    /**
     * 获取峰谷平电量统计数据
     *
     * @param params 查询参数
     * @return 峰谷平电量统计结果
     */
    List<PeakValleyFlatStatsVO> getPeakValleyFlatStats(Map<String, Object> params);

    /**
     * 获取三相不平衡分析数据
     */
    List<ThreePhaseUnbalanceVO> getThreePhaseUnbalanceData(Map<String, Object> params);

    /**
     * 获取日负载率统计数据
     *
     * @param params 查询参数
     * @return 日负载率统计结果
     */
    List<LoadRateStatsVO> getDailyLoadRate(Map<String, Object> params);

    /**
     * 获取时间段负载率统计数据
     *
     * @param params 查询参数
     * @return 时间段负载率统计结果
     */
    List<LoadRateStatsVO> getPeriodLoadRate(Map<String, Object> params);

    /**
     * 获取超载设备统计数据
     *
     * @param params 查询参数
     * @return 超载设备统计结果
     */
    List<LoadRateStatsVO> getOverloadedDevices(Map<String, Object> params);

    /**
     * 获取日电量排行榜
     *
     * @param date          统计日期（格式：yyyy-MM-dd）
     * @param orgId         组织ID（可选）
     * @param stationNumber 站号（可选）
     * @param limit         返回前N条
     * @return List<Map < String, Object>>
     */
    List<DailyEnergyRankingDTO> getDailyEnergyRanking(
            String date,
            String orgId,
            Long stationNumber,
            Integer limit
    );

    /**
     * 获取配电房环境温度变化
     *
     * @param familyId      家庭ID（可选）
     * @param orgId         组织ID（可选）
     * @param deviceId      设备ID（可选）
     * @param stationNumber 站号（可选）
     * @return List<TemperatureHumidityData>
     */
    List<TemperatureHumidityData> getTemperatureHumidityTrend(
            String familyId,
            String orgId,
            Long deviceId,
            Long stationNumber);

    /**
     * 烟雾、水浸、入侵：绿色（正常）/红色（告警)
     * 状态卡片
     *
     * @param familyId      家庭ID（可选）
     * @param orgId         组织ID（可选）
     * @param deviceId      设备ID（可选）
     * @param stationNumber 站号（可选）
     * @return AlarmStatusData
     */
    AlarmStatusData getAlarmStatus(
            String familyId,
            String orgId,
            Long deviceId,
            Long stationNumber
    );

    /**
     * 获取配电房温度热力图数据
     *
     * @param familyId 家庭ID（可选）
     * @return 热力图数据列表
     */
    List<TemperatureHeatmapItem> getTemperatureHeatmapData(
            String orgId,
            String familyId
    );

    /**
     * 获取配电房湿度热力图数据
     *
     * @param familyId 家庭ID（可选）
     * @return 热力图数据列表
     */

    List<HumidityHeatmapData> getHumidityHeatmapData(String orgId,
                                                     String familyId);

    /**
     * 获取断路器状态历史数据(微机保护)
     *
     * @param orgId      组织ID
     * @param deviceId   设备ID
     * @param breakerNum 断路器编号
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @return 断路器状态历史数据列表
     */
    List<BreakerStatusRecord> getBreakerStatusHistory(
            String orgId,
            Long stationNumber,
            Long deviceId,
            Integer breakerNum,
            LocalDateTime startTime,
            LocalDateTime endTime);

    /**
     * 分析断路器状态历史记录，识别可能的跳闸事件（如过流跳闸）
     *
     * @param records 断路器状态历史数据（按时间升序排列）
     * @return 匹配到的跳闸事件列表
     */
    List<TripEvent> analyzeTripEvents(List<BreakerStatusRecord> records, BigDecimal currentThreshold,
                                      Long timeWindowSeconds);

    /**
     * 多条件查询三相温度趋势数据
     */
    List<ThreePhaseTemperatureDTO> getThreePhaseTemperatureTrend(
            Long deviceId,
            String familyId,
            String orgId,
            Long stationNumber,
            LocalDateTime startTime,
            LocalDateTime endTime
    );

    /**
     * 多条件查询三相温度对比数据
     */
    Map<String, Object> getMultiTransformerTemperatureComparison(
            String orgId,
            Long stationNumber);

    /**
     * 获取无线测温主机三相电缆温度趋势（24小时，每5分钟一个点）
     */
    Map<String, Object> getWirelessHostCableTempTrend(
            String orgId,
            List<Long> deviceIds,
            Long stationNumber
    );

    /**
     * 获取电缆温度排名 Top10
     */
    Map<String, Object> getCableTemperatureTop10(
            String orgId,
            Long stationNumber
    );

    //驾驶舱小卡片
    Map<String, Object> getEnterpriseKpiCards(String orgId);

    /**
     * 获取驾驶舱所有 KPI 数据
     */
    DashboardKpiDTO getDashboardKpi(String orgId);

    /**
     * 统计配电房、配电箱和设备的数量
     */
    Map<String, Object> getCounts(String orgId);

    //企业大屏中央统计数据
    Map<String, Object> getEnterpriseDashboardData(String orgId);
}
